package co.edu.usbcali.unidad.presentation.backEndBeans;

import co.edu.usbcali.unidad.exceptions.*;
import co.edu.usbcali.unidad.modelo.*;
import co.edu.usbcali.unidad.modelo.dto.UnidadResidencialDTO;
import co.edu.usbcali.unidad.presentation.businessDelegate.BusinessDelegatorView;
import co.edu.usbcali.unidad.utilities.*;

import com.icesoft.faces.async.render.RenderManager;
import com.icesoft.faces.async.render.Renderable;
import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import com.icesoft.faces.component.selectinputdate.SelectInputDate;
import com.icesoft.faces.context.DisposableBean;
import com.icesoft.faces.webapp.xmlhttp.FatalRenderingException;
import com.icesoft.faces.webapp.xmlhttp.PersistentFacesState;
import com.icesoft.faces.webapp.xmlhttp.RenderingException;
import com.icesoft.faces.webapp.xmlhttp.TransientRenderingException;

import java.math.BigDecimal;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;
import java.util.Vector;

import javax.faces.event.PhaseId;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.DataModel;
import javax.faces.model.SelectItem;

public class UnidadResidencialView extends DataSource implements Renderable,
DisposableBean {

	private HtmlInputText txtUnrBarrio;
	private HtmlInputText txtUnrDireccion;
	private HtmlInputText txtUnrNombre;
	private HtmlInputText txtUnrTelefono;
	private HtmlSelectOneMenu txtAdmCodigo_Administrador;
	private HtmlSelectOneMenu cmbPais;
	private HtmlSelectOneMenu cmbCiudad;
	private HtmlSelectOneMenu cmbEstCodigo_Estado;
	private HtmlInputText txtUnrNit;
	private HtmlCommandButton btnSave;
	private HtmlCommandButton btnModify;
	private HtmlCommandButton btnDelete;
	private HtmlCommandButton btnClear;
	private boolean renderDataTable;
	private boolean flag = true;
	private RenderManager renderManager;
	private PersistentFacesState state = PersistentFacesState.getInstance();
	private List<UnidadResidencial> unidadResidencial;
	private List<UnidadResidencialDTO> unidadResidencialDTO;
	private List<SelectItem> listEstado = new ArrayList<SelectItem>();
	private List<SelectItem> listCiudad = new ArrayList<SelectItem>();
	private List<SelectItem> listPais = new ArrayList<SelectItem>();
	private List<SelectItem> listAdministrador = new ArrayList<SelectItem>();

	public List<SelectItem> getListAdministrador() {
		return listAdministrador;
	}

	public void setListAdministrador(List<SelectItem> listAdministrador) {
		this.listAdministrador = listAdministrador;
	}

	public UnidadResidencialView() {
		super("");
	}

	public HtmlSelectOneMenu getCmbPais() {
		try {
			List<Pais> list = BusinessDelegatorView.findByCriteriaInPais(
					null, null, null);
			listPais.clear();
			listPais.add(new SelectItem(0, " --Seleccione Pais-- "));

			for (Pais pais : list) {
				listPais.add(new SelectItem(pais.getPaiCodigo(), pais.getPaiNombre()));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return cmbPais;
	}

	public void setCmbPais(HtmlSelectOneMenu cmbPais) {
		this.cmbPais = cmbPais;
	}

	public List<SelectItem> getListPais() {
		return listPais;
	}

	public void setListPais(List<SelectItem> listPais) {
		this.listPais = listPais;
	}

	public HtmlSelectOneMenu getCmbCiudad() {
		try {
			List<Ciudad> list = BusinessDelegatorView.findByCriteriaInCiudad(
					null, null, null);
			listCiudad.clear();
			listCiudad.add(new SelectItem(0, " --Seleccione Ciudad-- "));

			for (Ciudad ciudad : list) {
				listCiudad.add(new SelectItem(ciudad.getCiuCodigo(), ciudad
						.getCiuNombre()));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}

		return cmbCiudad;
	}

	public void setCmbCiudad(HtmlSelectOneMenu cmbCiudad) {
		this.cmbCiudad = cmbCiudad;
	}

	public HtmlSelectOneMenu getCmbEstCodigo_Estado() {
		try {
			List<Estado> list = BusinessDelegatorView.findByCriteriaInEstado(
					null, null, null);
			listEstado.clear();
			listEstado.add(new SelectItem(0, " --Seleccione el Estado-- "));

			for (Estado estado : list) {
				listEstado.add(new SelectItem(estado.getEstCodigo(), estado
						.getEstNombre()));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return cmbEstCodigo_Estado;
	}

	public void setCmbEstCodigo_Estado(HtmlSelectOneMenu cmbEstCodigoEstado) {
		cmbEstCodigo_Estado = cmbEstCodigoEstado;
	}

	public List<SelectItem> getListEstado() {
		return listEstado;
	}

	public void setListEstado(List<SelectItem> listEstado) {
		this.listEstado = listEstado;
	}

	public List<SelectItem> getListCiudad() {

		return listCiudad;
	}

	public void setListCiudad(List<SelectItem> listCiudad) {
		this.listCiudad = listCiudad;
	}

	public HtmlSelectOneMenu getTxtAdmCodigo_Administrador() {
		try {
			List<Administrador> list = BusinessDelegatorView.findByCriteriaInAdministrador(null, null, null);
			listAdministrador.clear();
			listAdministrador.add(new SelectItem(0, " --Seleccione el Estado-- "));

			for (Administrador administrador : list) {
				listAdministrador.add(new SelectItem(administrador.getAdmCodigo()));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return txtAdmCodigo_Administrador;
	}

	public void setTxtAdmCodigo_Administrador(
			HtmlSelectOneMenu txtAdmCodigoAdministrador) {
		txtAdmCodigo_Administrador = txtAdmCodigoAdministrador;
	}

	public String action_clear() {
		txtUnrBarrio.setValue(null);
		txtUnrBarrio.setDisabled(true);
		txtUnrDireccion.setValue(null);
		txtUnrDireccion.setDisabled(true);
		txtUnrNombre.setValue(null);
		txtUnrNombre.setDisabled(true);
		txtUnrTelefono.setValue(null);
		txtUnrTelefono.setDisabled(true);
		txtAdmCodigo_Administrador.setValue(null);
		txtAdmCodigo_Administrador.setDisabled(true);
		cmbCiudad.setValue(null);
		cmbCiudad.setDisabled(true);
		cmbEstCodigo_Estado.setValue(null);
		cmbEstCodigo_Estado.setDisabled(true);
		txtUnrNit.setValue(null);
		txtUnrNit.setDisabled(false);
		btnSave.setDisabled(true);
		btnDelete.setDisabled(true);
		btnModify.setDisabled(true);
		btnClear.setDisabled(false);

		return "";
	}

	public void listener_txtId(ValueChangeEvent event) {
		if ((event.getNewValue() != null) && !event.getNewValue().equals("")) {
			UnidadResidencial entity = null;

			try {
				String unrNit = new String(txtUnrNit.getValue().toString());
				entity = BusinessDelegatorView.getUnidadResidencial(unrNit);
			} catch (Exception e) {
				// TODO: handle exception
			}

			if (entity == null) {
				txtUnrBarrio.setDisabled(false);
				txtUnrDireccion.setDisabled(false);
				txtUnrNombre.setDisabled(false);
				txtUnrTelefono.setDisabled(false);
				txtAdmCodigo_Administrador.setDisabled(false);
				cmbCiudad.setDisabled(false);
				cmbEstCodigo_Estado.setDisabled(false);
				txtUnrNit.setDisabled(false);
				btnSave.setDisabled(false);
				btnDelete.setDisabled(true);
				btnModify.setDisabled(true);
				btnClear.setDisabled(false);
			} else {
				txtUnrBarrio.setValue(entity.getUnrBarrio());
				txtUnrBarrio.setDisabled(false);
				txtUnrDireccion.setValue(entity.getUnrDireccion());
				txtUnrDireccion.setDisabled(false);
				txtUnrNombre.setValue(entity.getUnrNombre());
				txtUnrNombre.setDisabled(false);
				txtUnrTelefono.setValue(entity.getUnrTelefono());
				txtUnrTelefono.setDisabled(false);
				txtAdmCodigo_Administrador.setValue(entity.getAdministrador()
						.getAdmCodigo());
				txtAdmCodigo_Administrador.setDisabled(false);
				cmbCiudad.setValue(entity.getCiudad().getCiuCodigo());
				cmbCiudad.setDisabled(false);
				cmbEstCodigo_Estado.setValue(entity.getEstado().getEstCodigo());
				cmbEstCodigo_Estado.setDisabled(false);
				txtUnrNit.setValue(entity.getUnrNit());
				txtUnrNit.setDisabled(true);
				btnSave.setDisabled(true);
				btnDelete.setDisabled(false);
				btnModify.setDisabled(false);
				btnClear.setDisabled(false);
			}
		}
	}

	public String action_save() {
		try {

			String nit = txtUnrNit.getValue().toString();
			String barrio = txtUnrBarrio.getValue().toString();
			String direccion = txtUnrDireccion.getValue().toString();
			String telefono = txtUnrTelefono.getValue().toString();
			String ciudad = cmbCiudad.getValue().toString();
			String estado = cmbEstCodigo_Estado.getValue().toString();
			String nombre = txtUnrNombre.getValue().toString();
			String admCodigo = txtAdmCodigo_Administrador.getValue().toString();

			if(!Utilities.soloNumeros(nit)){
				throw new Exception("El Nit debe ser solo numerico");
			}
			if(nit.trim().equals("")){
				throw new Exception("El Nit es obligatorio");
			}
			if(!Utilities.soloLetras(barrio)){
				throw new Exception("El nombre del barrio debe contener solo letras");
			}
			if(barrio.trim().equals("")){
				throw new Exception("El barrio es obligatorio");
			}
			//if(!Utilities.soloNumerosyLetras(direccion)){
			//throw new Exception("La direccion no contiene el caracter #");
			//}
			if (direccion.trim().equals("")) {
				throw new Exception("La direccion es obligatoria");
			}
			if (!Utilities.soloNumeros(telefono)) {
				throw new Exception("El telefono debe ser numerico");
			}
			if (telefono.trim().equals("")) {
				throw new Exception("EL telefono debe ser obligatorio");
			}
			if(ciudad.trim().equals("")){
				throw new Exception("Debe elegir una ciudad");
			}
			if(estado.trim().equals("")){
				throw new Exception("Debe elegir algun estado");
			}
			if (!Utilities.soloLetras(nombre)) {
				throw new Exception("El nombre debe tener solo letras");
			}
			if (nombre.trim().equals("")) {
				throw new Exception("El nombre de la unidad residencial es obligatorio");
			}
			//if(!Utilities.soloNumeros(admCodigo)){
			//throw new Exception("El codigo de administrador debe ser numerico");
			//}
			if (admCodigo.trim().equals("")) {
				throw new Exception("Debe elegir un administrador para la unidad");
			}
			BusinessDelegatorView.saveUnidadResidencial(barrio, direccion, nit, nombre, telefono, admCodigo, ciudad, estado);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_delete() {
		try {
			BusinessDelegatorView.deleteUnidadResidencial(FacesUtils
					.checkString(txtUnrNit));
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_modify() {
		try {
			String nit = txtUnrNit.getValue().toString();
			String barrio = txtUnrBarrio.getValue().toString();
			String direccion = txtUnrDireccion.getValue().toString();
			String telefono = txtUnrTelefono.getValue().toString();
			String ciudad = cmbCiudad.getValue().toString();
			String estado = cmbEstCodigo_Estado.getValue().toString();
			String nombre = txtUnrNombre.getValue().toString();
			String admCodigo = txtAdmCodigo_Administrador.getValue().toString();

			if(!Utilities.soloNumeros(nit)){
				throw new Exception("El Nit debe ser solo numerico");
			}
			if(nit.trim().equals("")){
				throw new Exception("El Nit es obligatorio");
			}
			if(!Utilities.soloLetras(barrio)){
				throw new Exception("El nombre del barrio debe ser contener solo letras");
			}
			if(barrio.trim().equals("")){
				throw new Exception("El barrio es obligatorio");
			}
			//if(!Utilities.soloNumerosyLetras(direccion)){
			//throw new Exception("La direccion no contiene el caracter #");
			//}
			if (direccion.trim().equals("")) {
				throw new Exception("La direccion es obligatoria");
			}
			if (!Utilities.soloNumeros(telefono)) {
				throw new Exception("El telefono debe ser numerico");
			}
			if (telefono.trim().equals("")) {
				throw new Exception("EL telefono es obligatorio");
			}
			if(ciudad.trim().equals("")){
				throw new Exception("Debe elegir una ciudad");
			}
			if(estado.trim().equals("")){
				throw new Exception("Debe elegir algun estado");
			}
			if (!Utilities.soloLetras(nombre)) {
				throw new Exception("El nombre debe tener solo letras");
			}
			if (nombre.trim().equals("")) {
				throw new Exception("El nombre es obligatorio");
			}
			if(!Utilities.soloNumeros(admCodigo)){
				throw new Exception("El codigo de administrador debe ser numerico");
			}
			if (admCodigo.trim().equals("")) {
				throw new Exception("El codigo del administrador debe ser obligatorio");
			}

			BusinessDelegatorView.updateUnidadResidencial(barrio, direccion, nit, nombre, telefono, admCodigo, ciudad, estado);

			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_modifyWitDTO(String unrBarrio, String unrDireccion,
			String unrNit, String unrNombre, String unrTelefono,
			String admCodigo_Administrador, String ciuCodigo_Ciudad,
			String estCodigo_Estado) throws Exception {
		try {
			BusinessDelegatorView
			.updateUnidadResidencial(unrBarrio, unrDireccion, unrNit,
					unrNombre, unrTelefono, admCodigo_Administrador,
					ciuCodigo_Ciudad, estCodigo_Estado);
			renderManager.getOnDemandRenderer("UnidadResidencialView")
			.requestRender();
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
		} catch (Exception e) {
			// renderManager.getOnDemandRenderer("UnidadResidencialView").requestRender();
			FacesUtils.addErrorMessage(e.getMessage());
			throw e;
		}

		return "";
	}

	public List<UnidadResidencial> getUnidadResidencial() {
		if (flag) {
			try {
				unidadResidencial = BusinessDelegatorView
				.getUnidadResidencial();
				flag = false;
			} catch (Exception e) {
				flag = true;
				FacesUtils.addErrorMessage(e.getMessage());
			}
		}

		return unidadResidencial;
	}

	public boolean isFlag() {
		return flag;
	}

	public void setUnidadResidencial(List<UnidadResidencial> unidadResidencial) {
		this.unidadResidencial = unidadResidencial;
	}

	public boolean isRenderDataTable() {
		try {
			if (flag) {
				if (BusinessDelegatorView.findTotalNumberUnidadResidencial() > 0) {
					renderDataTable = true;
				} else {
					renderDataTable = false;
				}
			}

			flag = false;
		} catch (Exception e) {
			renderDataTable = false;
			e.printStackTrace();
		}

		return renderDataTable;
	}

	public DataModel getData() {
		state = PersistentFacesState.getInstance();

		if (onePageDataModel == null) {
			onePageDataModel = new LocalDataModel(pageSize);
		}

		return onePageDataModel;
	}

	/**
	 * This is where the Object data is retrieved from the database and returned
	 * as a list of objects for display in the UI.
	 */
	private DataPage<UnidadResidencial> getDataPage(int startRow, int pageSize) {
		// Retrieve the total number of objects from the database. This
		// number is required by the DataPage object so the paginator will know
		// the relative location of the page data.
		int totalNumberUnidadResidencial = 0;

		try {
			totalNumberUnidadResidencial = BusinessDelegatorView
			.findTotalNumberUnidadResidencial().intValue();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Calculate indices to be displayed in the ui.
		int endIndex = startRow + pageSize;

		if (endIndex > totalNumberUnidadResidencial) {
			endIndex = totalNumberUnidadResidencial;
		}

		try {
			unidadResidencial = BusinessDelegatorView
			.findPageUnidadResidencial(sortColumnName, sortAscending,
					startRow, endIndex - startRow);

			// Remove this Renderable from the existing render groups.
			// leaveRenderGroups();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Add this Renderable to the new render groups.
		// joinRenderGroups();
		// Reset the dirtyData flag.
		onePageDataModel.setDirtyData(false);
		// This is required when using Hibernate. If the SessionManager is not
		// cleared or closed objects are cached and stale objects will show up
		// in the table.
		// This way, the detached objects are reread from the database.
		// This call is not required with Hibernate, which uses a Query Hint
		// to clear the l2 cache in the DAO.
		flag = true;

		return new DataPage<UnidadResidencial>(totalNumberUnidadResidencial,
				startRow, unidadResidencial);
	}

	public DataModel getDataDTO() {
		state = PersistentFacesState.getInstance();

		if (onePageDataModel == null) {
			onePageDataModel = new LocalDataModelDTO(pageSize);
		}

		return onePageDataModel;
	}

	/**
	 * This is where the Object data is retrieved from the database and returned
	 * as a list of objects for display in the UI.
	 */
	private DataPage<UnidadResidencialDTO> getDataPageDTO(int startRow,
			int pageSize) {
		// Retrieve the total number of objects from the database. This
		// number is required by the DataPage object so the paginator will know
		// the relative location of the page data.
		int totalNumberUnidadResidencial = 0;

		try {
			totalNumberUnidadResidencial = BusinessDelegatorView
			.findTotalNumberUnidadResidencial().intValue();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Calculate indices to be displayed in the ui.
		int endIndex = startRow + pageSize;

		if (endIndex > totalNumberUnidadResidencial) {
			endIndex = totalNumberUnidadResidencial;
		}

		try {
			unidadResidencial = BusinessDelegatorView
			.findPageUnidadResidencial(sortColumnName, sortAscending,
					startRow, endIndex - startRow);

			if (Utilities.validationsList(unidadResidencial)) {
				unidadResidencialDTO = new ArrayList<UnidadResidencialDTO>();

				for (UnidadResidencial unidadResidencialTmp : unidadResidencial) {
					UnidadResidencialDTO unidadResidencialDTO2 = new UnidadResidencialDTO();
					unidadResidencialDTO2.setUnrNit(unidadResidencialTmp
							.getUnrNit().toString());
					unidadResidencialDTO2.setUnrBarrio((unidadResidencialTmp
							.getUnrBarrio() != null) ? unidadResidencialTmp
									.getUnrBarrio().toString() : null);
					unidadResidencialDTO2.setUnrDireccion((unidadResidencialTmp
							.getUnrDireccion() != null) ? unidadResidencialTmp
									.getUnrDireccion().toString() : null);
					unidadResidencialDTO2.setUnrNombre((unidadResidencialTmp
							.getUnrNombre() != null) ? unidadResidencialTmp
									.getUnrNombre().toString() : null);
					unidadResidencialDTO2.setUnrTelefono((unidadResidencialTmp
							.getUnrTelefono() != null) ? unidadResidencialTmp
									.getUnrTelefono().toString() : null);
					unidadResidencialDTO2
					.setAdmCodigo_Administrador((unidadResidencialTmp
							.getAdministrador().getAdmCodigo() != null) ? unidadResidencialTmp
									.getAdministrador().getAdmCodigo()
									.toString()
									: null);
					unidadResidencialDTO2
					.setCiuCodigo_Ciudad((unidadResidencialTmp
							.getCiudad().getCiuCodigo() != null) ? unidadResidencialTmp
									.getCiudad().getCiuCodigo().toString()
									: null);
					unidadResidencialDTO2
					.setEstCodigo_Estado((unidadResidencialTmp
							.getEstado().getEstCodigo() != null) ? unidadResidencialTmp
									.getEstado().getEstCodigo().toString()
									: null);
					unidadResidencialDTO2
					.setUnidadResidencial(unidadResidencialTmp);
					unidadResidencialDTO2.setUnidadResidencialView(this);
					unidadResidencialDTO.add(unidadResidencialDTO2);
				}
			}

			// Remove this Renderable from the existing render groups.
			leaveRenderGroups();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Add this Renderable to the new render groups.
		joinRenderGroups();
		// Reset the dirtyData flag.
		onePageDataModel.setDirtyData(false);
		// This is required when using Hibernate. If the SessionManager is not
		// cleared or closed objects are cached and stale objects will show up
		// in the table.
		// This way, the detached objects are reread from the database.
		// This call is not required with Hibernate, which uses a Query Hint
		// to clear the l2 cache in the DAO.
		flag = true;

		return new DataPage<UnidadResidencialDTO>(totalNumberUnidadResidencial,
				startRow, unidadResidencialDTO);
	}

	protected boolean isDefaultAscending(String sortColumn) {
		return true;
	}

	/**
	 * This method is called when a render call is made from the server. Render
	 * calls are only made to views containing an updated record. The data is
	 * marked as dirty to trigger a fetch of the updated record from the
	 * database before rendering takes place.
	 */
	public PersistentFacesState getState() {
		onePageDataModel.setDirtyData();

		return state;
	}

	/**
	 * This method is called from faces-config.xml with each new session.
	 */
	public void setRenderManager(RenderManager renderManager) {
		this.renderManager = renderManager;
	}

	public void renderingException(RenderingException arg0) {
		if (arg0 instanceof TransientRenderingException) {
		} else if (arg0 instanceof FatalRenderingException) {
			// Remove from existing Customer render groups.
			leaveRenderGroups();
		}
	}

	/**
	 * Remove this Renderable from existing uiCustomerBeans render groups.
	 * OnDemandRenderers are named/created using the underlying Customer Number.
	 */
	private void leaveRenderGroups() {
		if (Utilities.validationsList(unidadResidencialDTO)) {
			for (UnidadResidencialDTO unidadResidencialTmp : unidadResidencialDTO) {
				renderManager.getOnDemandRenderer("UnidadResidencialView")
				.remove(this);
			}
		}
	}

	/**
	 * Add this Renderable to the new uiCustomerBeans render groups.
	 * OnDemandRenderers are named/created using the underlying Customer Number.
	 */
	private void joinRenderGroups() {
		if (Utilities.validationsList(unidadResidencialDTO)) {
			for (UnidadResidencialDTO unidadResidencialTmp : unidadResidencialDTO) {
				renderManager.getOnDemandRenderer("UnidadResidencialView").add(
						this);
			}
		}
	}

	public void dispose() throws Exception {
	}

	public RenderManager getRenderManager() {
		return renderManager;
	}

	public void setState(PersistentFacesState state) {
		this.state = state;
	}

	public HtmlInputText getTxtUnrBarrio() {
		return txtUnrBarrio;
	}

	public void setTxtUnrBarrio(HtmlInputText txtUnrBarrio) {
		this.txtUnrBarrio = txtUnrBarrio;
	}

	public HtmlInputText getTxtUnrDireccion() {
		return txtUnrDireccion;
	}

	public void setTxtUnrDireccion(HtmlInputText txtUnrDireccion) {
		this.txtUnrDireccion = txtUnrDireccion;
	}

	public HtmlInputText getTxtUnrNombre() {
		return txtUnrNombre;
	}

	public void setTxtUnrNombre(HtmlInputText txtUnrNombre) {
		this.txtUnrNombre = txtUnrNombre;
	}

	public HtmlInputText getTxtUnrTelefono() {
		return txtUnrTelefono;
	}

	public void setTxtUnrTelefono(HtmlInputText txtUnrTelefono) {
		this.txtUnrTelefono = txtUnrTelefono;
	}

	public HtmlInputText getTxtUnrNit() {
		return txtUnrNit;
	}

	public void setTxtUnrNit(HtmlInputText txtUnrNit) {
		this.txtUnrNit = txtUnrNit;
	}

	public HtmlCommandButton getBtnSave() {
		return btnSave;
	}

	public void setBtnSave(HtmlCommandButton btnSave) {
		this.btnSave = btnSave;
	}

	public HtmlCommandButton getBtnModify() {
		return btnModify;
	}

	public void setBtnModify(HtmlCommandButton btnModify) {
		this.btnModify = btnModify;
	}

	public HtmlCommandButton getBtnDelete() {
		return btnDelete;
	}

	public void setBtnDelete(HtmlCommandButton btnDelete) {
		this.btnDelete = btnDelete;
	}

	public HtmlCommandButton getBtnClear() {
		return btnClear;
	}

	public void setBtnClear(HtmlCommandButton btnClear) {
		this.btnClear = btnClear;
	}

	public void setRenderDataTable(boolean renderDataTable) {
		this.renderDataTable = renderDataTable;
	}

	public void setFlag(boolean flag) {
		this.flag = flag;
	}

	public List<UnidadResidencialDTO> getUnidadResidencialDTO() {
		return unidadResidencialDTO;
	}

	public void setUnidadResidencialDTO(
			List<UnidadResidencialDTO> unidadResidencialDTO) {
		this.unidadResidencialDTO = unidadResidencialDTO;
	}

	public TimeZone getTimeZone() {
		return java.util.TimeZone.getDefault();
	}

	/**
	 * A special type of JSF DataModel to allow a datatable and datapaginator to
	 * page through a large set of data without having to hold the entire set of
	 * data in memory at once. Any time a managed bean wants to avoid holding an
	 * entire dataset, the managed bean declares this inner class which extends
	 * PagedListDataModel and implements the fetchData method. fetchData is
	 * called as needed when the table requires data that isn't available in the
	 * current data page held by this object. This requires the managed bean
	 * (and in general the business method that the managed bean uses) to
	 * provide the data wrapped in a DataPage object that provides info on the
	 * full size of the dataset.
	 */
	private class LocalDataModel extends PagedListDataModel {
		public LocalDataModel(int pageSize) {
			super(pageSize);
		}

		public DataPage<UnidadResidencial> fetchPage(int startRow, int pageSize) {
			// call enclosing managed bean method to fetch the data
			return getDataPage(startRow, pageSize);
		}
	}

	private class LocalDataModelDTO extends PagedListDataModel {
		public LocalDataModelDTO(int pageSize) {
			super(pageSize);
		}

		public DataPage<UnidadResidencialDTO> fetchPage(int startRow,
				int pageSize) {
			// call enclosing managed bean method to fetch the data
			return getDataPageDTO(startRow, pageSize);
		}
	}
}
